package controller.services;

import java.io.File;
import java.util.List;
import model.PlayModeTypes;
import model.mp3.MP3Info;
import model.mp3.MP3Object;
import model.preset.Preset;

/**
 *
 * interface for VTPlayer general service
 */
public interface VTPlayerService {

    /**
     * load the playlist
     *
     * load the preset data
     *
     * initialize preset data
     *
     * initialize last song played
     */
    void initializeSystemData();

    /**
     * load mp3 file into JLayer 's player object
     *
     * @param mp3File - the mp3 file to load
     */
    void loadFile(File mp3File);

    /**
     * play loaded mp3 file
     */
    void play(MP3Object mp3Object);

    /**
     * stop loaded mp3 file
     */
    void stop();

    /**
     * pause loaded mp3 file
     */
    void pause();

    /**
     * set volume level
     *
     * @param gain - the volume level (from 0.00 to 1.00)
     */
    void setVolume(Float gain);

    /**
     * set equalize vale for a specific band 
     * @param band - band number
     * @param gain - eq gain
     */
    void setEqForBand(int band, Float gain);
    
     /**
     * set volume on mute
     */
    void mute();

    /**
     * play next song
     */
    void playNextSong();

    /**
     * play previous song
     */
    void playPreviousSong();

    /**
     * set the play mode (REPEAT, NORMAL, SHUFFLE)
     *
     * @param playMode
     */
    void setPlayMode(PlayModeTypes playMode);

    /**
     * retrieve the playlist 
     */
    List<MP3Object> getPlaylist();

    /**
     * set preset TODO: add preset as parameter
     */
    Preset getPreset();

    /**
     * get song info
     *
     * @return - the mp3 infos
     */
    MP3Info getSongInfo();
    
    MP3Object getSongToPlay();

    
}
